package thinkinjava4.ch20_annotations;

import thinkinjava4.atunit.Test;
import thinkinjava4.atunit.TestObjectCreate;
import thinkinjava4.atunit.TestProperty;
import thinkinjava4.util.OSExecute;

import java.util.*;

import static thinkinjava4.util.Print.print;

public class AtUnitExample4 {
    static String theory = "All brontosauruses are thin at one end, much MUCH thicker in the middle, " +
            "and then thin again at the far end.";
    private String word;
    private Random random = new Random();

    public AtUnitExample4(String word) {
        this.word = word;
    }

    public String getWord() {
        return word;
    }

    public String scrambleWord() {
        List<Character> chars = new ArrayList<>();
        for (Character c : word.toCharArray())
            chars.add(c);
        Collections.shuffle(chars, random);
        StringBuilder result = new StringBuilder();
        for (char ch : chars)
            result.append(ch);
        return result.toString();
    }

    @TestProperty
    static List<String> input = Arrays.asList(theory.split(" "));
    @TestProperty
    static Iterator<String> words = input.iterator();

    @TestObjectCreate
    static AtUnitExample4 create() {
        if (words.hasNext())
            return new AtUnitExample4(words.next());
        else
            return null;
    }

    @Test
    boolean words() {
        print("'" + getWord() + "'");
        return getWord().equals("are");
    }

    @Test
    boolean scramble1() {
        random = new Random(47);
        print("'" + getWord() + "'");
        String scrambled = scrambleWord();
        print(scrambled);
        return scrambled.equals("lAl");
    }

    @Test
    boolean scramble2() {
        random = new Random(74);
        print("'" + getWord() + "'");
        String scrambled = scrambleWord();
        print(scrambled);
        return scrambled.equals("tsaeborornussu");
    }

    public static void main(String[] args) {
        System.out.println("starting");
        OSExecute.command(OSExecute.DEFAULT_DIR, OSExecute.ATUNIT_ANN + "AtUnitExample4");
    }
}
